/******************************************************************************
* 文件 :
* 描述 :
* 备注 :
******************************************************************************/



/******************************************************************************
* 功能:
* 参数:
* 返回:
* 注意:
******************************************************************************/
void OS_TickScan(void)
{
    OS_LIST *p,*list;
    OS_TASK_OBJ *obj;
    OS_TICK_NOD *nod;
    OS_TICK_TM tm;
    OS_ATOM_ARG();

    OS_ATOM_LOCK();
    //时间轮
    tm = ++ OSTickCount;
    list = OSTickHead +(tm &(OS_TICK_HEAD_NUM -1));
    for(p = list->next; p != list; ){
        nod = (OS_TICK_NOD *)p;
        obj = OS_ORG(nod,OS_TASK_OBJ,tick);
        p = p->next;
        if(tm != nod->match){
            break;
        }

        OS_ObjWake(obj,(obj->taskState)&OS_STATE_BLk);
    }

    #if OS_CFG_RR_EN > 0
    //时间片
    if(OSRRSlice){
        OSRRSlice --;
    }
    if(0 ==(OSSchedLock|OSRRSlice)){
        OS_SRR();
    }
    #endif

    OS_ATOM_UNLOCK();
}

/******************************************************************************
* 功能:
* 参数:
* 返回:
* 注意:
******************************************************************************/
void OS_IdleTask(void *arg)
{
    //arg = arg;
    for(;;){
        ;
    }
}

/******************************************************************************
* 功能:
* 参数:
* 返回:
* 注意:
******************************************************************************/
void OS_InitHook(void)
{
    OSIntNest = 0;
    OSSchedLock = 0;
    OSRunStart = 0;
    #if OS_CFG_RR_EN > 0
    OSRRSlice = 0;
    #endif
}

void OS_Init(void)
{
    OS_InitHook();

    OS_ReadyListInit();
    OS_TickListInit();

    OS_TaskCreate(&OSIdleObj,OS_IdleTask,0,OSIdleStk+OS_IDLE_STK_SZ,OS_PRIO_IDLE);
    #if OS_CFG_TIMER_EN > 0
    OS_TimerInit();
    #endif
}

void OS_Start(void)
{
    if(OSRunStart == 0){
        OS_ReadyTaskTop();
        OSTaskRun = OSTaskNew;
        OSRunStart = 1;
        OS_START_RUN();
    }
}


